package oj.oj_206;

import oj.ListNode;

/**
 * 206反转链表
 * 给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
 * https://leetcode.cn/problems/reverse-linked-list/description/
 */
public class Solution {
//    时间复杂度：O(N)
//    空间复杂度：O(1)
    public ListNode reverseList(ListNode head) {
        ListNode cur=head;
        ListNode pre=null;
        while(cur!=null){
            ListNode curNext=cur.next;
            cur.next=pre;
            pre=cur;
            cur=curNext;//如果直接用cur=cur.next会有bug,因为在之前cur已经修改过了，所以需要把cur.next对象先保存下来
        }
        return pre;
    }

    public static void main(String[] args)  {
        ListNode node=new ListNode(1);
        ListNode node1=new ListNode(2);
        ListNode node2=new ListNode(3);
        ListNode node3=new ListNode(4);
        ListNode node4=new ListNode(5);
        node.next=node1;
        node1.next=node2;
        node2.next=node3;
        node3.next=node4;
        Solution solution=new Solution();
        solution.reverseList(node);
    }
}